[함수] RSS 리더기 php5 용 입니다. :: PHP5의 추가된 사항을 올리는 곳입니다.[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

PHP5의 추가된 사항을 올리는 곳입니다.
[1]
등록일:2007-10-10 23:11:03 (0%)
작성자:
제목:[함수] RSS 리더기 php5 용 입니다.
엊그제  올렸다가  몇가지  수정하고  추가해서  다시  올립니다.  ㅜㅡ;;
파일은  reader  클래스를  포함한  파일(소스1)과  출력(소스2)  파일입니다.
xml  이  지원되도록  컴파일  되어져야  합니다.

이넘이  작동하는  모습은

http://hk.dotnet.cc/rss.php

에서  확인하실  수  있습니다.  제가  자주가는  http://www.dpreview.com  에서  제공하는  rss  feed  입니다.

-------------------------------------------------
소스1  (rss.reader.class.php)

<?
/**
*  http://web.resource.org/rss/1.0/spec
*  http://blogs.law.harvard.edu
*/
class  rss
{
        private  $parser  =  null;
        private  $current_tag  =  null;
        private  $current_attribute  =  null;
        private  $rdf_code  =  null;
        private  $item_count  =  0;

        public  $channel  =  array();

        public  function  __construct()
        {
                $this->parser  =  xml_parser_create();
        }

        public  function  parse($rss_file)
        {
                xml_set_object($this->parser,  &$this);
                xml_set_element_handler($this->parser,  "_startElement",  "_endElement");
                xml_set_character_data_handler($this->parser,  "_characterData");

                $fp  =  @fopen($rss_file,  "r");

                if(!$fp)
                {
                        throw  new  Exception("Error  reading  RSS  file  :  "  .  $rss_file);
                }
                else
                {
                        while($rssData  =  fread($fp,  4096))
                        {
                                if(xml_parse($this->parser,  $rssData,  feof($fp))  ==  false)
                                {
                                        throw  new  Exception(xml_error_string(xml_get_error_code($this->parser))  .  "  Line  :  "  .  xml_get_current_line_number($this->parser));
                                }
                        }
                        fclose($fp);
                        xml_parser_free($this->parser);
                }
        }

        private  function  _startElement($parser,  $name,  $attribute  =  null)
        {
                $this->current_tag  =  $name;
                $this->current_attribute  =  $attribute;

                switch($this->current_tag)
                {
                        case  "CHANNEL"  :
                                $this->rdf_code  =  "channel";
                        break;
                        case  "IMAGE"  :  
                                $this->rdf_code  =  "image";
                        break;
                        case  "ITEM"  :
                                $this->rdf_code  =  "item";
                        break;
                        case  "CLOUD"  :
                                $this->rdf_code  =  "cloud";
                        break;
                        case  "TTL"  :
                                $this->rdf_code  =  "ttl";
                        break;
                        case  "TEXTINPUT"  :
                                $this->rdf_code  =  "textinput";
                        break;
                }
        }

        private  function  _endElement($parser,  $name,  $attribute  =  null)
        {
                if($name  ==  "ITEM")
                {
                        $this->item_count  +=  1;
                }

                $this->current_tag  =  null;
                $this->current_attribute  =  null;
        }

        private  function  _characterData($parser,  $cdata)
        {
                $cdata  =  iconv(xml_parser_get_option($parser,  XML_OPTION_TARGET_ENCODING),  "EUC-KR",  $cdata);

                if($this->rdf_code  ==  "channel")
                {
                        switch($this->current_tag)
                        {
                                case  "TITLE"  :
                                        $this->channel['channel']['title']  .=  $cdata;
                                break;
                                case  "LINK"  :
                                        $this->channel['channel']['link']  .=  $cdata;
                                break;
                                case  "DESCRIPTION"  :
                                        $this->channel['channel']['description']  .=  $cdata;
                                break;
                                case  "LANGUAGE"  :
                                        $this->channel['channel']['language']  .=  $cdata;
                                break;
                                case  "COPYRIGHT"  :
                                        $this->channel['channel']['copyright']  .=  $cdata;
                                break;
                                case  "MANAGINGEDITOR"  :
                                        $this->channel['channel']['managingeditor']  .=  $cdata;
                                break;
                                case  "WEBMASTER"  :
                                        $this->channel['channel']['webmaster']  .=  $cdata;
                                break;
                                case  "PUBDATE"  :
                                        $this->channel['channel']['pubdate']  .=  $cdata;
                                break;
                                case  "LASTBUILDDATE"  :
                                        $this->channel['channel']['lastbuilddate']  .=  $cdata;
                                break;
                                case  "DOCS"  :
                                        $this->channel['channel']['docs']  .=  $cdata;
                                break;
                        }
                }
                else  if($this->rdf_code  ==  "image")
                {
                        switch($this->current_tag)
                        {
                                case  "URL"  :
                                        $this->channel['channel']['image_url']  .=  $cdata;
                                break;
                                case  "WIDTH"  :
                                        $this->channel['channel']['image_width']  .=  $cdata;
                                break;
                                case  "HEIGHT"  :
                                        $this->channel['channel']['image_height']  .=  $cdata;
                                break;
                                case  "TITLE"  :
                                        $this->channel['channel']['image_title']  .=  $cdata;
                                break;
                                case  "LINK"  :
                                        $this->channel['channel']['image_link']  .=  $cdata;
                                break;
                        }
                }
                else  if($this->rdf_code  ==  "item")
                {
                        switch($this->current_tag)
                        {
                                case  "LINK"  :
                                        $this->channel['item'][$this->item_count]['link']  .=  $cdata;
                                break;
                                case  "TITLE"  :
                                        $this->channel['item'][$this->item_count]['title']  .=  $cdata;
                                break;
                                case  "DESCRIPTION"  :
                                        $this->channel['item'][$this->item_count]['description']  .=  $cdata;
                                break;
                                case  "PUBDATE"  :
                                        $this->channel['item'][$this->item_count]['pubdate']  .=  $cdata;
                                break;
                        }
                }
        }

        public  function  __destruct()
        {
        }
};
?>

-------------------------------------------------
소스2  (rss.html)

<?
include_once("rss.reader.class.php");

using("xml");

$rss  =  new  rss();

try
{
        //  rss  주소
        $rss->parse("http://slashdot.org/rss/index.rss");
}
catch(Exception  $e)
{
        die($e->getMessage());
}
?>
<!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD  HTML  4.0  Transitional//EN">
<HTML>
<HEAD>
<TITLE>  New  Document  </TITLE>
<style  type="text/css">
<!--
TABLE,  TR,  TD,  TEXTAREA,  INPUT,  SELECT,  OPTION
{
        font-family:Tahoma;
        font-size:9pt;
}
-->
</style>
<META  NAME="Generator"  CONTENT="EditPlus">
<META  NAME="Author"  CONTENT="">
<META  NAME="Keywords"  CONTENT="">
<META  NAME="Description"  CONTENT="">
</HEAD>

<BODY>

<table  border="0"  align="center"  width="100%"  cellpadding="0"  cellspacing="0">
<tr>
        <td>

        <?  if(isset($rss->channel['channel']))  {  ?>

        <table  border="0"  align="left"  width="0%"  cellpadding="3"  cellspacing="0"><tr>
                <td>
                <?  if($rss->channel['channel']['image_url']  !=  null)  {  ?>
                <a  href="<?=  $rss->channel['channel']['image_link']  ?>"><img  src="<?=  $rss->channel['channel']['image_url']  ?>"  title="<?=  $rss->channel['channel']['image_title']  ?>"  border="0"  target="_blank">
                <?  }  ?>
                </td>
                <td>
                <?=  $rss->channel['channel']['title']  ?><br>
                <?=  $rss->channel['channel']['description']  ?>

                </td>
        </tr></table>

        <?  }  ?>

        </td>
</tr>
<tr>
        <td><hr></td>
</tr>
<tr>
        <td>

        <table  border="0"  align="left"  width="100%"  cellpadding="5"  cellspacing="0">

        <?
        if(isset($rss->channel['item']))
        {
                for($i  =  0;  $i  <  sizeof($rss->channel['item']);  $i++)
                {
        ?>

        <tr>
                <td><a  href="<?=  $rss->channel['item'][$i]['link']  ?>  "  target="_blank"><?=  $rss->channel['item'][$i]['title']  ?></a></td>
        </tr>
        <tr>
                <td><?=  nl2br(html_entity_decode($rss->channel['item'][$i]['description']))  ?></td>

        <?
                }
        }
        ?>
        
        </tr></table>

        </td>
</tr>
</table>

  
  
  

    
      건강이        05-06-17  19:59      
점점  PHP  5.0  사용하시는분이  느나  보네요..준비를  해나가야  겠습니다.    
  
점점  PHP  5.0  사용하시는분이  느나  보네요..준비를  해나가야  겠습니다.  
    
      x딜마        05-06-17  21:30      
using(\"xml\");  <---  이함수  뭔가요  에러가  나네요??    
  
using(\"xml\");  <---  이함수  뭔가요  에러가  나네요??  
    
      거니        05-06-18  13:18      
x딜마  /  
핫..  구문  삭제  부탁드립니다.  제가  사용하는  함수인데  빼먹고  안지웠네엽~  죄송..ㅜ.ㅡ    
  
x딜마  /
핫..  구문  삭제  부탁드립니다.  제가  사용하는  함수인데  빼먹고  안지웠네엽~  죄송..ㅜ.ㅡ  
    
      우워오        05-09-16  00:08      
PHP5  버전이  아니면  한글이  깨져버리는  문제가  있죠..-_-;    
  
출처  :  http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=40519&sca=&sfl=wr_subject%7C%7Cwr_content&stx=php5&sop=and&page=5
[본문링크] [함수] RSS 리더기 php5 용 입니다.
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=1087
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.